\subsection{术语}
\begin{quote}
\begin{description}
  \item[GPS] Global Positioning System，全球定位系统。
  \item[GPS接收器] GPS reciever，用来接收卫星传到地面上的数据。
  \item[RS-232] Recommended Standard 232，串行数据传输标准。
  \item[NMEA 0183] GPS数据的通信协议。
\end{description}
\end{quote}

\subsection{GPS}
\href{http://en.wikipedia.org/wiki/GPS}{GPS}是由美国国防部开发的定位系统，利用24到32颗中轨道人造卫星向地面实时传送数据，如果要得到相对精确的定位数据需要同时接收至少三颗卫星的数据，如下图：
\begin{figure}[H]
  \centering
  \includegraphics[scale=.6]{pic/ConstellationGPS.png}
  \caption{卫星传送数据}
\end{figure}
要怎样才能得到卫星传来的GPS数据呢？这就需要使用GPS接收器（reciever）了，如下图：
\begin{figure}[H]
  \centering
  \includegraphics{pic/reciever.jpg}
  \caption{GPS接收器}
\end{figure}
我们现在拥有的GPS接收器是通过\href{http://en.wikipedia.org/wiki/RS-232}{RS-232}类型的串口与ARM板进行连接，当GPS接收器接上电源以后，就会不断地通过串口向ARM板传送GPS数据。因此，需要采用对串口进行读取的方法来接收GPS数据，这属于串口编程（Serial Programming），我们使用的编程环境是Linux。

接收到GPS数据以后，就可以对数据进行分析了。GPS数据采用的是\href{http://en.wikipedia.org/wiki/NMEA_0183}{NMEA 0183}通信协议，NMEA 0183规定每行数据以\$作为开始，紧接着的五个字符分别表示talker（前两个字符）和信息类型（后三个字符），然后就是实际的数据，数据间以逗号作为分隔符，不同信息类型包含不同数量的数据，数据以星号（*）作为结尾，最后两个字符是用来校验前面的数据的，可以没有。

通过\href{http://www.gpsinformation.org/dale/nmea.htm}{对协议格式的分析}，GPS数据主要包含以下五类信息类型：
\begin{table}[H]
  \caption{GPS数据的信息类型}
  \centering
  \begin{tabular}{ll}
    \hline
    信息类型 & 含义 \\
    \hline
    GGA & GPS Fix Data，GPS修正数据，提供3D位置和精确的数据 \\
    GSA & Satellite status，卫星状态信息 \\
    GSV & Satellites in view \\
    RMC & Recommended Minimum sentence C，主要GPS数据，包括位置、速度、时间 \\
    VTG & Velocity made good，轨迹补偿与地面速度 \\
    \hline
  \end{tabular}
\end{table}
下面是GPS数据的示例：
\begin{shaded}
\begin{verbatim}
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39
$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
$GPVTG,054.7,T,034.4,M,005.5,N,010.2,K*48
\end{verbatim}
\end{shaded}

根据上面的信息就能分离出我们所需的数据了。

\subsection[ZigBee技术及其应用\protect\footnote{本节由邹祁峰撰写}]{ZigBee技术及其应用}
\begin{enumerate}
  \item ZigBee简介
\end{enumerate}

ZigBee是一种新的无线连接技术，该无线连接技术主要解决低成本、低功耗、低复杂度、低传输速率、近距离的设备联网应用。

ZigBee标准基于802.15.4协议栈而建立，具备了强大的设备联网功能，它支持三种主要的自组织无线网络类型，即星型结构、网状结构（Mesh）和簇状结构（Cluster tree），并且系统节点具有多跳路由功能，特别是能够组成蜂窝网状网络结构，具有很强的网络健壮性和系统可靠性。

\begin{enumerate}[resume]
  \item ZigBee无线技术优点
\end{enumerate}

\begin{itemize}
  \item 设备省电

        Zigbee技术采用了多种节电的工作模式，可以确保两节五号电池支持长达6个月到2年左右的使用时间。

  \item 通信可靠

        ZigBee采用了CSMA-CA的碰撞避免机制，同时为需要固定带宽的通信业务预留了专用时隙，避免了发送数据时的竞争和冲突；MAC层采用了完全确认的数据传输机制，每个发送的数据包都必须等待接收方的确认信息。

  \item 网络的自组织、自愈能力强

        ZigBee的自组织功能：无需人工干预，网络节点能够感知其他节点的存在，并确定连接关系，组成结构化的网络；

        ZigBee自愈功能：增加或者删除一个节点，节点位置发生变动，节点发生故障等等，网络都能够自我修复，并对网络拓扑结构进行相应地调整，无需人工干预，保证整个系统仍然能正常工作。

  \item 成本低廉

        设备的复杂程度低，且ZigBee协议是免专利费的，这些可以有效地降低设备成本；ZigBee的工作频段灵活，为免执照频段的2.4GHz，就是没有使用费的无线通信。

  \item 网络容量大

        一个ZigBee网络可以容纳最多254个从设备和一个主设备，一个区域内可以同时存在200多个ZigBee网络。

  \item 数据安全

        ZigBee提供了数据完整性检查和鉴权功能，加密算法采用AES-128，同时各个应用可以灵活确定其安全属性。
\end{itemize}

\begin{enumerate}[resume]
  \item ZigBee设备外观
\end{enumerate}

\begin{figure}[H]
  \centering
  \includegraphics[scale=.4]{pic/zigbee01.jpg}
  \caption{局部图一}
\end{figure}

\begin{figure}[H]
  \centering
  \includegraphics[scale=.4]{pic/zigbee02.jpg}
  \caption{局部图二}
\end{figure}

\begin{figure}[H]
  \centering
  \includegraphics[scale=.4]{pic/zigbee03.jpg}
  \caption{全局图}
\end{figure}

\begin{enumerate}[resume]
  \item 设备配置
\end{enumerate}

根据本项目的实际状况，ZigBee设备的配置步骤如下：
\begin{enumerate}[label=\alph*)]
  \item 打开计算机的超级终端（开始$\to$所有程序$\to$附件$\to$通讯$\to$超级终端），在“连接描述”对话框中“名称 (N)”中输入“S0”，单击“确定”。在“链接到”对话框中的“连接时使用”的下拉按钮中选择“COM1”，单击“确定”。在“端口设置“对话框中设置为：波特率38400、数据位8、校验NONE（无）、停止位1、数据流控制为无。

  \item 按“配置按键“3秒，进入配置状态：
  \begin{enumerate}[label=\textcircled{\arabic*}]
    \item 设备地址：每个ZigBee模块具有唯一的地址标识，同个网络系统中不能有相同地址的节点，设备地址采用2字节的短地址表示。其ID范围是0000-FFFF，本系统中三个ZigBee设备分别选择了0001、0002、0003地址。
    \item 设备名称：可以不用设置。本系统中各设备名称设置成与其ID值一致。
    \item 节点类型：ID为0001的设成终端设备、0002设成中继路由、0003设成终端设备（特别注意：本系统网路中无中心节点）。
    \item 信道配置：在同一系统中，所有设备的工作信道必须设置相同。为了避免Wi-Fi系统的干扰，推荐使用4 : 2.425GHz、9 : 2.450GHz、E : 2.475GHz、F : 2.480GHz信道。本系统中选择4 : 2.425GHz。
    \item 网络类型：同个系统中所有设备的网络类型必须一致。本系统中选择对等网（非主从网，无中心节点）。
    \item 网络ID：同个网络中ID必须相同。本系统选择00为网络ID。
    \item 发送模式：
    \begin{itemize}
      \item 广播模式：无需目标地址。
      \item 主从模式：中心节点必须目标地址，非中心节点无需目标地址，默认发给中心。目标地址为2字节的MAC地址，加在数据包前面即可（接受方会自动识别这个地址，然后决定是接受还是丢弃）。
      \item 点对点：必须目标地址（地址在数据包前添加）。本系统中选择点对点的发送模式。
    \end{itemize}

    \item 数据类型：本系统选择ASCII码（只在按目标地址发送情况下设置，在广播发送情况下无须设置）。
    \item 其它的都可采用系统默认设置。
  \end{enumerate}
\end{enumerate}

\begin{enumerate}[resume]
  \addtocounter{enumi}{2}
  \item 设备使用
\end{enumerate}

配置之后的设备就组成如下所示的网络拓扑结构图：
\begin{figure}[H]
  \centering
  \includegraphics[scale=.6]{pic/zigbee04.png}
\end{figure}
设备的使用主要是对串口进行编程控制就可以了，但是有以下几点需要注意：
\begin{enumerate}[label=\alph*)]
  \item 0001向0003发送数据时，需要在数据包前面附上0003的ID地址。数据传输过程：数据报（0003 + 数据包）发送至0002中继站，0002中继站经过判断其为发送至0003终端的报文，于是将其转发至0003终端。
  \item 0003向0001发送数据时，同样需要附上0001的ID地址。数据传输过程：数据报（0001 + 数据包）发送至0002中继站，0002中继站经过判断其为发送至0001终端的报文，于是将其转发至0001终端。
\end{enumerate}

\subsection[Google Maps API\protect\footnote{本节由佘海源撰写}]{Google Maps API}
\begin{enumerate}
  \item 概述
\end{enumerate}

Google Maps API由JavaScript构成，所以它是一个基于浏览器的JS应用，而一般用户也可以通过其公布的API自定义Google Maps应用，当然每个申请者必须先到Google上申请一个独有的API密钥，以支持你的自定义应用。

\begin{enumerate}[resume]
  \item 适时显示原理结构
\end{enumerate}

Google Maps显示一个点是根据经纬度，然后通过其API，转换成坐标点后显示在屏幕上。而我们的需求则是要在map上不停地刷新点，得到新位置，从而达到动态显示的效果。简单点说，就是要通过终端发送来的经纬度参数，不间断地接手，然后根据坐标参数创建点并显示。

\begin{enumerate}[resume]
  \item 服务器端实现
\end{enumerate}

要实现map图像上坐标的适时刷新，那就要用到AJAX异步通信技术。服务器端接收到的最新经纬度数据，通过异步传输给map显示端，而map端怎么知道数据更新了并接收呢，那就要用定时器控制数据的请求和接收，在规定时间内（比如一秒）显示段发送请求，等待回应，而服务器则一直接收从客户端传来的数据并分析是否为最新数据，如果是则发送给显示端，否则就不发送，如果显示端在规定时间内未接收到数据，则继续发送请求。如下图：
\begin{figure}[H]
  \centering
  \includegraphics[scale=.6]{pic/google_maps_api.png}
\end{figure}

\begin{enumerate}[resume]
  \item Google Maps显示端实现
\end{enumerate}

要在浏览器中正确加载Google Maps地图，必须遵照其规定：
\begin{itemize}
  \item 使用\texttt{script}标签包含调用Google Maps API的JavaScript。
  \item 创建名为“map\_canvas”的\texttt{div}元素来包含地图（此处map\_canvas可自己随便命名）。
  \item 编写JavaScript函数创建“map”对象。
  \item 将地图的中心设置为指定的地理点。
  \item 从\texttt{body}标签的\texttt{onload}事件初始化地图对象。
\end{itemize}

然后就自己写入接收数据的函数，添加位置点的函数和删除点的函数，此时基本的功能已实现，只需要把它们组合在一起就行了。